package com.sushi.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Date;

/**
 * 时间相关 工具类
 * @author Administrator
 */
public class TimeUtil {

    /**
     * 格式： 年-月-日 时:分:秒
     */
    public static final SimpleDateFormat Y_M_D_H_M_S = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    /**
     * 格式： 年-月-日
     */
    public static final SimpleDateFormat Y_M_D = new SimpleDateFormat("yyyy-MM-dd");

    /**
     * 格式： 月-日-周
     */
    public static final SimpleDateFormat M_D_E = new SimpleDateFormat("MMM dd EEE");

    /**
     * 格式： 时:分:秒
     */
    public static final SimpleDateFormat H_M_S = new SimpleDateFormat("HH:mm:ss");

    /**
     * 格式： 时:分:秒  AM/PM
     */
    public static final SimpleDateFormat H_M_S_A = new SimpleDateFormat("HH:mm:ss aaa");

    /**
     * 字符串时间转换成long时间
     * @param time 要转换的时间
     * @param dateFormat 格式
     */
    public static synchronized long getLongTime(String time, SimpleDateFormat dateFormat) throws ParseException {
        Date date = dateFormat.parse(time);
        return date.getTime();
    }

    /**
     * 字符串时间转换成long时间  默认 年-月-日 时:分:秒
     * @param time 要转换的时间
     */
    public static synchronized long getLongTime(String time) throws ParseException {
        return getLongTime(time, Y_M_D_H_M_S);
    }

    /**
     * long时间转换成指定格式字符串
     * @param time 需要转换的时间
     * @param dateFormat 转换格式
     */
    public static synchronized String getFormatTime(long time, SimpleDateFormat dateFormat) {
        return dateFormat.format(new Date(time));
    }

    /**
     * long时间转换成指定格式字符串 默认 年-月-日 时:分:秒
     * @param time 需要转换的时间
     * @return 结果字符串
     */
    public static synchronized String getFormatTime(long time) {
        return getFormatTime(time, Y_M_D_H_M_S);
    }

    /**
     * 获取今天0点的时间
     * @return 返回今天0点
     */
    public static LocalDateTime getToday() {
        return LocalDate.now().atStartOfDay();
    }

    /**
     * 获取long时间值
     * @param time
     * @return
     */
    public static synchronized long getLongTime(LocalDateTime time) {
        return time.toInstant(ZoneOffset.of("+8")).toEpochMilli();
    }

}
